//
// Created by zhangrongxiang on 2017/9/21 14:38
//

#include <stdio.h>
#include <unistd.h>

void main() {
    int i;
    /*
     * 一个程序一调用fork函数，系统就为一个新的进程准备了前述三个段，
     * 首先，系统让新的进程与旧的进程使用同一个代码段，因为它们的程序还是相同的，对于数据段和堆栈段，
     * 系统则复制一份给新的进程，这样，父进程的所有数据都可以留给子进程，但是，子进程一旦开始运行，
     * 虽然它继承了父进程的一切数据，但实际上数据却已经分开，相互之间不再有影响了，
     * 也就是说，它们之间不再共享任何数据了。而如果两个进程要共享什么数据的话，
     * 就要使用另一套函数（shmget，shmat，shmdt等）来操作。
     *
     * 现在，已经是两个进程了，对于父进程，fork函数返回了子程序的进程号，而对于子程序，fork函数则返回零，
     * 这样，对于程序，只要判断fork函数的返回值，就知道自己是处于父进程还是子进程中。
     *
     *
     *
     * 就绪态：
     *  进程已经具备执行的一切条件，正在等待分配 CPU 的处理时间。
     * 执行态：
     *  该进程正在占用 CPU 运行。
     * 等待态：
     *  进程因不具备某些执行条件而暂时无法继续执行的状态。
     */
//    if (fork() == 0) {
//        /* 子进程程序 */
//        for (i = 1; i < 1000; i++)
//            printf("This is child process\n");
//    } else {
//        /* 父进程程序*/
//        for (i = 1; i < 1000; i++)
//            printf("This is parent process\n");
//    }
    fork();
    printf("\nid ==== %d\n", getpid());   // 获取进程号
}